﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TheBullysStore.Models.ModuloAdministracion.Edificio;
using TheBullysStore.Models.ModuloServicios.ContratoPreventivo;
using TheBullysStore.Models.ModuloAdministracion.Banco;
using TheBullysStore.Models.ModuloAdministracion.DepartamentoPeru;
using TheBullysStore.Models.ModuloAdministracion.ProvinciaPeru;
using TheBullysStore.Models.ModuloAdministracion.DistritoPeru;
using TheBullysStore.Models.ModuloAdministracion.Proveedor;
using TheBullysStore.Models.ModuloAdministracion.AreaComun;
using TheBullysStore.Models.ModuloAdministracion.Mantenible;
using log4net;

namespace TheBullysStore.Controllers.ModuloServicio
{
    public class ContratoPreventivoController : Controller
    {
        //
        // GET: /ContratoPreventivo/
        private static ILog log = LogManager.GetLogger(typeof(ContratoPreventivoController));
        EdificioFacade edificioFacade = new EdificioFacade();
        EdificioDAO edificioDAO = new EdificioDAO();
        ContratoPreventivoDAO contratoPreventivoDAO = new ContratoPreventivoDAO();
        ProveedorDAO proveedorDAO = new ProveedorDAO();
        ProvinciaPeruDAO provinciaPeruDAO = new ProvinciaPeruDAO();
        BancoFacade bancoFacade = new BancoFacade();
        DepartamentoPeruFacade departamentoPeruFacade = new DepartamentoPeruFacade();
        DepartamentoPeruDAO departamentoPeruDAO = new DepartamentoPeruDAO();
        ProvinciaPeruFacade provinciaPeruFacade = new ProvinciaPeruFacade();
        DistritoPeruFacade distritoPeruFacade = new DistritoPeruFacade();
        AreaComunDAO areacomunDAO = new AreaComunDAO();
        MantenibleDAO mantenibleDAO = new MantenibleDAO();

        public ActionResult Index()
        {
            return View();
        }

        public ActionResult ContratoPreventivo()
        {
            return View();
        }

        public ActionResult RegistrarContratoPreventivo()
        {
            return View();
        }

        public ActionResult BuscarContratoPreventivo()
        {
            return View();
        }
        //bien
        [HttpPost]
        public JsonResult cargarProveedores(ContratoPreventivoBean contrato)
        {
            try
            {
                List<ContratoPreventivoBean> listaProveedores = contratoPreventivoDAO.ListarProveedores(contrato);

                return Json(new { listaProveedores });
            }
            catch (Exception ex) {
                log.Error("Cargar Proveedores CP - GET(EXCEPTION):", ex);
                return Json(new { listaProveedores = "Ocurrio un error al buscar" });
            }
        }

        //bien
        [HttpPost]
        public JsonResult buscarEdificio(EdificioBean edificio)
        {
            try
            {
                List<EdificioBean> listaEdificio = edificioFacade.Listaredificio(edificio);

                return Json(new { listaEdificio });
            }
            catch (Exception ex)
            {
                log.Error("Buscar Edificio - GET(EXCEPTION):", ex);
                return Json(new { listaEdificio = "Ocurrió un error al buscar" });
            }
        }


        //bien
        [HttpPost]
        public JsonResult cargarEdificios(EdificioBean edificio)
        {
            try
            {
                List<EdificioBean> listaEdificio = edificioFacade.Listaredificio(edificio);

                return Json(new { listaEdificio });
            }
            catch (Exception ex) {
                log.Error("Cargar Edificios - GET(EXCEPTION):",ex);
                return Json(new { listaEdificio = "Ocurrió un error al buscar" });
            }
        }

        //bien
        [HttpPost]
        public JsonResult TodosMisMantenibles(string nombremantenible)
        {
            try
            {
                List<ContratoPreventivoBean> listaTodosMisMantenibles = contratoPreventivoDAO.listaTodosMisMantenibles(nombremantenible);
                return Json(new { listaTodosMisMantenibles });
            }
            catch (Exception ex){
                log.Error("TodosMisMantenibles - GET(EXPECTION):",ex);
                return Json(new { listaTodosMisMantenibles = "Ocurrió un error al buscar" });
            }
        }

        //bien
        [HttpPost]
        public JsonResult registrarContratoPreventivo(ContratoPreventivoBean contratoPreventivo)
        {
            try
            {
                ContratoPreventivoBean contrato = contratoPreventivoDAO.RegistrarContratoPreventivo(contratoPreventivo);

                return Json(new { contrato });
            }
            catch (Exception ex) {
                log.Error("registrarContratoPreventivo - GET(EXPECTION):", ex);
                return Json(new { listaTodosMisMantenibles = "Ocurrió un error al registrar" });
            }

        }

        //bien
        [HttpPost]
        public JsonResult cargarDepartamentos(DepartamentoPeruBean departamento)
        {
            try
            {
                List<DepartamentoPeruBean> listaDepartamentoPeru = departamentoPeruFacade.ListarDepartamentoPeru(departamento);

                return Json(new { listaDepartamentoPeru });
            }
            catch (Exception ex) {
                log.Error("cargarDepartamentos - GET(EXCEPTION):", ex);
                return Json(new { listaDepartamentoPeru = "Ocurrió un error al buscar" });
            }
        }

        //bien
        [HttpPost]
        public JsonResult cargarProvincias(DepartamentoPeruBean departamento)
        {
            try
            {
                List<ProvinciaPeruBean> listaProvinciaPeru = provinciaPeruFacade.ListarProvinciaPeru(departamento);

                return Json(new { listaProvinciaPeru });
            }
            catch (Exception ex) {
                log.Error("cargarProvincias - GET(EXCEPTION):", ex);
                return Json(new { listaProvinciaPeru = "Ocurrió un error al buscar" });
            }
        }

        //bien
        [HttpPost]
        public JsonResult cargarDistritos(ProvinciaPeruBean provincia)
        {
            try
            {
                List<DistritoPeruBean> listaDistritoPeru = distritoPeruFacade.ListarDistritoPeru(provincia);
                return Json(new { listaDistritoPeru });
            }
            catch (Exception ex) {
                log.Error("cargarDistritos - GET(EXCEPTION):", ex);
                return Json(new { listaDistritoPeru = "Ocurrió un error al buscar" });
            }
        }

        //bien
        [HttpPost]
        public JsonResult buscarProveedorContrato(ProveedorBean proveedor)
        {
            try
            {

                List<ProveedorBean> listaProveedor = proveedorDAO.ListarProveedorMiguel(proveedor);
                return Json(new { listaProveedor });
            }
            catch (Exception ex) {
                log.Error("buscarProveedorContrato - GET(EXCEPTION):", ex);
                return Json(new { listaProveedor = "Ocurrió un error al buscar" });
            }
        }

        //bien
        [HttpPost]
        public JsonResult cargarDepartamentosProv(DepartamentoPeruBean departamento)
        {
            try
            {
                List<DepartamentoPeruBean> listaDepartamentoProv = departamentoPeruDAO.ListarDepartamentoProv(departamento);
                return Json(new { listaDepartamentoProv });
            }
            catch (Exception ex) {
                log.Error("cargarDepartamentosProv - GET(EXCEPTION):", ex);
                return Json(new { listaDepartamentoProv = "Ocurrió un error al buscar" });
            }
        }

        //bien
        [HttpPost]
        public JsonResult cargarProvinciasProv(DepartamentoPeruBean departamento)
        {
            try
            {

                List<ProvinciaPeruBean> listaProvinciaPeru = provinciaPeruDAO.ListarProvinciaProv(departamento);
                return Json(new { listaProvinciaPeru });
            }
            catch (Exception ex) {
                log.Error("cargarProvinciasProv - GET(EXCEPTION):", ex);
                return Json(new { listaProvinciaPeru = "Ocurrió un error al buscar" });
            }
        }

        //bien
        [HttpPost]
        public JsonResult cargarSelectAreaComun(AreaComunBean areacomun)
        {
            try
            {
                List<AreaComunBean> listaAreaComun = areacomunDAO.ListarAreaComunCP(areacomun);
                return Json(new { listaAreaComun });
            }
            catch (Exception ex)
            {
                log.Error("cargarSelectAreaComun - GET(EXCEPTION):", ex);
                return Json(new { listaAreaComun = "Ocurrió un error al buscar" });
            }
        }

        //bien
        [HttpPost]
        public JsonResult buscarMantenible(MantenibleBean mantenible)
        {
            try
            {
                List<MantenibleBean> listaMantenible = mantenibleDAO.ListarMantenibleMiguel(mantenible);
                return Json(new { listaMantenible });
            }
            catch (Exception ex) {
                log.Error("buscarMantenible - GET(EXCEPTION):", ex);
                return Json(new { listaMantenible = "Ocurrió un error al buscar" });
            }
        }

        //bien
        [HttpPost]
        public JsonResult buscarContratoPreventivo(ContratoPreventivoBean contratoPreventivo)
        {
            try
            {
                List<ContratoPreventivoBean> ListaContratoPreventivo = contratoPreventivoDAO.ListarContratoPreventivoBCP(contratoPreventivo);
                return Json(new { ListaContratoPreventivo });
            }
            catch (Exception ex) {
                log.Error("buscarContratoPreventivo - GET(EXCEPTION):", ex);
                return Json(new { ListaContratoPreventivo = "Ocurrió un error al buscar" });
            }
        }

        //bien
        [HttpPost]
        public JsonResult modificarContratoPreventivo(ContratoPreventivoBean contratoPreventivo)
        {
            ContratoPreventivoBean Contrato = contratoPreventivoDAO.modificarContrato(contratoPreventivo);
            try
            {
                if (Contrato.Conexion == "Bien")
                {
                    return Json(new { me = "Se modificó correctamente el " + Contrato.IdContratoPreventivo, Conexion = Contrato.Conexion });
                }
                else
                {
                    if (Contrato.Conexion == "+/-")
                    {
                        return Json(new { me = "Solo puede modificar la Fecha Fin. Este campo es válido sólo a partir de la fecha: " + Contrato.FechaModificacion });
                    }
                    else
                    {
                        return Json(new { me = Contrato.Conexion });
                    }
                }
            }
            catch (Exception ex) {
                log.Error("modificarContratoPreventivo - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al modificar" });
            }
        }

        //bien
        [HttpPost]
        public JsonResult verDetalleContrato(ContratoPreventivoBean contratoPreventivo)
        {
            try
            {
                List<ContratoPreventivoBean> ListaContratoPreventivo = contratoPreventivoDAO.ListarDetalleContratoPreventivoBCP(contratoPreventivo);
                return Json(new { ListaContratoPreventivo });
            }
            catch (Exception ex) {
                log.Error("verDetalleContrato - GET(EXCEPTION):", ex);
                return Json(new { ListaContratoPreventivo = "Ocurrió un error al modificar" });
            }
        }

        //bien
        [HttpPost]
        public JsonResult eliminarContratoPreventivo(ContratoPreventivoBean contratoPreventivo)
        {
            try
            {
                string conexion = contratoPreventivoDAO.eliminarContratoPreventivo(contratoPreventivo);

                if (conexion == "Bien")
                {
                    return Json(new { me = "Se eliminó correctamente + " + contratoPreventivo.IdContratoPreventivo });
                }
                else
                {
                    if (conexion == "No se puede")
                    {
                        return Json(new { me = "No se puede eliminar, debido a que existen mantenimientos preventivos asociados al contrato" });
                    }
                    else
                    {
                        return Json(new { me = conexion });
                    }
                }
            }
            catch (Exception ex) {
                log.Error("eliminarContratoPreventivo - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al eliminar" });
            }
        }

        [HttpPost]
        public JsonResult setearEdificio(EdificioBean edificio)
        {
            try
            {
                List<EdificioBean> llegadaSeteo = edificioDAO.SetearEdificio(edificio);
                return Json(new { llegadaSeteo });
            }
            catch (Exception ex) {
                log.Error("setearEdificio - GET(EXCEPTION):", ex);
                return Json(new { llegadaSeteo = "Ocurrió un error al eliminar" });
            }
        }
    }
}
